With widespread availability of broadband communications and the convergence of personal entertainment systems and personal computers, multimedia streaming is becoming increasingly more popular. Using a client computer, a user requests a multimedia stream, which may include an audio file, an audiovisual file, or other type of media file. Upon receiving the client request, a system acting as a server streams the media file to the client. In turn, the client receives and stores the stream, allowing the user to access the content. The user can begin to access the content as soon as some portion of the multimedia stream has been stored; the client computer need not receive the entire media file before presenting it is to the user.
Ideally, streaming media provides the content of the media file to the user smoothly and without interruption. However, if the streaming of the media file does not keep pace with or remain ahead of the playback of the content, presentation of the content will become choppy: each time that the playback catches up with the point in the media file that has been received, playback will stop while waiting for additional portions of the media file to be received by the client computer.
Client computers typically cache a first portion of the media file before beginning playback, ensuring that enough of the media file has been streamed to allow smooth playback to begin. The short initial delay may be only a minor inconvenience. However, if playback continually catches up with the portion of the media file that has been received, playback repeatedly will stop until enough of the media file has been received to resume playback, then start again. The resulting stopping and starting makes for choppy playback, and a less satisfactory user experience.
Where many client computers may rely on one or a few servers for provision of streaming content, the server or servers may not be able to match client demand, resulting in generally dissatisfying experiences. The proliferation of peer-to-peer networks, however, may alleviate some of these concerns. In a peer-to-peer network, computer systems may act as both servers and clients to offload the workload from conventional servers. For example, in a peer-to-peer network, a first computing system may be acting as a client to receive a streaming media file from a server. Subsequently, a second computing system in the peer-to-peer network may request the same streaming media file. If the first computing system detects the second computing system's request for the media file, the first computing system can begin streaming the media file to the second computing system. Thus, the first computing system acts as a server, and provides the streaming media to its client, the second computing system. This can be regarded as a “cache and relay system,” with a first node receiving a streaming media file, caching the media file, and relaying it to other nodes seeking the same media file.
Regardless of the assistance of cache and relay systems in peer-to-peer networks, however, the access to a media file may not be smooth access when users do not access the streaming media in a linear manner. For example, if a user of one of the nodes performs a seek operation to jump forward to a later portion of the media file, other nodes in the neighborhood in the peer-to-peer network may not have the content the user seeks. If the user jumps ahead, no other nodes may have yet received and cached the desired portion of the file. Similarly, even if another node had cached the desired segment of the media file, that node may have released the earlier portion to free storage space to receive later portions of the streaming media.